#!/usr/bin/env node

const program = require('commander');
const package = require('./package');
const commandPath = './command/';
const binName = package['config']['bin-name'];

program.version(package.version).usage('<command> [options]')

program
.command('list')
.description('从gitlab拉取模板')
.alias('l')
.option('-c, --cookie', '用cookie获取')
.option('-t, --token', '用token获取')
.action((cmd) => {
    require(`${commandPath}${cmd._name}`)(cmd)
})

program
.command('init')
.description('生成一个新项目')
.alias('i')
.action((cmd) => {
    require(`${commandPath}${cmd._name}`)(cmd)
})

program
.command('eslint [src]')
.description('用eslint执行代码')
.alias('e')
.option('-f, --fix', 'auto fix code')
.action((src,cmd) => {
    //要需要支持其它eslint参数请先添加到option
    //console.log(cmd.args);
    // cmd.args 是多余参数
    require(`${commandPath}${cmd._name}`)(cmd,src)
})

program
.command('server')
.description('在当前目录下启用一个server')
.alias('s')
.option('-p, --port <端口号>', 'port code')
.action((cmd) => {
    require(`${commandPath}${cmd._name}`)(cmd)
})

program
.command('mock')
.description('在当前目录下启用一个mock-server')
.alias('m')
.option('-p, --port <端口号>', 'port code')
.action((cmd) => {
    require(`${commandPath}${cmd._name}`)(cmd)
})

program
.command('proxy')
.description('启用proxy')
.alias('p')
.option('-p, --port <端口号>', '要劫持的接口')
.option('-t, --target <指向地址>', '要转到的目录')
.action((cmd) => {
    require(`${commandPath}${cmd._name}`)(cmd)
})

program
.command('img')
.description('img图片压缩')
.option('-p, --path <路径>', '默认为当前路径')
.option('-o, --outpath <输出路径>', '默认为当前路径')
.option('-q, --quality <质量>', '压缩质量 10-90')
.option('-w, --webp [质量]', '生成webp质量 10-100')
.action((cmd) => {
    require(`${commandPath}${cmd._name}`)(cmd)
})

program
.command('upyun')
.description('又拍云图片压缩、上传')
.option('-p, --path <路径>', '读取文件夹、默认为当前路径')
.option('-q, --quality <质量>', '压缩质量 10-90')
.option('-w, --webp', '转成webp')
.option('-u, --uploadfile <文件夹名字>', '上传到云端文件夹')
.action((cmd) => {
    require(`${commandPath}${cmd._name}`)(cmd)
})

program
.command('config')
.description('当前项目的config')
.option('-l, --list', '列出配置')
.option('-u, --update', '更新配置')
.option('-k, --key <>', '更新key,配合update使用')
.option('-v, --value <>', '更新value,配合update使用')
.action((cmd) => {
    require(`${commandPath}${cmd._name}`)(cmd)
})

program
.command('uglify <dir>')
.description('uglify压缩混淆js文件')
.alias('u')
.option('-o, --output []', '输出文件','false')
.option('-c, --compress', '启用压缩')
.option('-m, --mangle', '启用混淆')
.action((dir, cmd) => {
    require(`${commandPath}${cmd._name}`)(cmd,dir)
})

program.on('--help', function() {
  console.log('\n');
  console.log('Examples:');
  // console.log('****************');
  console.log(`  node ${binName} config`);
  console.log(`  node ${binName} list`);
  console.log(`  node ${binName} init`);
  console.log(`  node ${binName} eslint`);
  console.log(`  node ${binName} server`);
  console.log(`  node ${binName} mock`);
  console.log(`  node ${binName} proxy`);
  console.log(`  node ${binName} img`);
  console.log(`  node ${binName} upyun`);
  console.log(`  node ${binName} uglify`);
});

program.parse(process.argv)

if(!program.args.length){
    program.help()
}